home *** CD-ROM | disk | FTP | other *** search
/ PsL Monthly 1993 December / PSL Monthly Shareware CD-ROM (December 1993).iso / prgmming / dos / basic / qlib.exe / INTRO.DOC < prev    next >
Encoding:
Text File  |  1992-05-10  |  45.3 KB  |  771 lines

  1.  
  2.     QLIB5 advanced function library for Microsoft BASIC compilers
  3.     Copyright (C) 1988-1992 Douglas Herr ■ all rights reserved
  4.  
  5. WHAT IS QLIB?
  6.  
  7.     QLIB is a library of subroutines CALL-able from QuickBASIC 4.0, 4.5
  8.     QBX or BC7, providing the BASIC programmer with many additional
  9.     functions and commands, along with un-BASIC-like speed and power.
  10.  
  11. WHY USE QLIB?
  12.  
  13.     QuickBASIC and BC7 represent an enormous leap in BASIC programming over
  14.     interpreted BASICA or GWBASIC, and is a language that many programmers
  15.     already know.  However, many programmers also know that many compiled
  16.     BASIC commands are not really quick, can be extremely cumbersome, and/or
  17.     will eat tremendous amounts of memory.  QLIB subroutines are written in
  18.     assembly language for maximum speed and compact size.  QLIB subroutines
  19.     can be up to 10 times faster than comparable BASIC commands and can
  20.     reduce the size of your .EXE files dramatically.  QLIB's subroutines also
  21.     provide many functions which are impossible with BASIC alone.
  22.  
  23.     Ideas for these routines come from a wide variety of sources.  If you want
  24.     to see additional routines, let me hear about it.  In this way, QLIB's
  25.     users can affect the direction QLIB takes.
  26.  
  27. DISCLAIMER
  28.  
  29.     Each QLIB routine has been tested extensively, but since I cannot foresee
  30.     every possible use or abuse of QLIB, I cannot be held responsible for any
  31.     damages resulting from its use.  I have used QLIB with IBM PC/XT, PC/AT,
  32.     PS/2 Model 30, 50z, Leading Edge model D, Zenith SuperSport 286,
  33.     and with XT, 286, 386sx, 386-33 and 486-25 clones with PC/MS-DOS
  34.     versions 3.1 through 5.0.  Video systems tested include IBM EGA
  35.     with 64k, Paradise EGA 480, Everex Micro Enhancer EGA, IBM's MCGA
  36.     and VGA built into the PS/2s, Hercules Graphics Card Plus, Hercules
  37.     InColor, cheap Hercules clones, IBM's Monochrome Display Adapter, and
  38.     a few SuperVGAs.  I have tested the subroutines with QuickBASIC versions
  39.     4.0b and 4.5, with BC 7.0 and with BC7's QuickBASIC extended (QBX).
  40.  
  41.  
  42. DISTRIBUTION and REGISTRATION
  43.  
  44.     QLIB is user-supported shareware, NOT public domain software.  The QLIB
  45.     files you have received are the complete QLIB package, usable within the
  46.     QuickBASIC or QBX editor to develop programs, and linkable with your
  47.     object code to create stand-alone .EXE programs.  These files may be
  48.     distributed freely in un-altered form, but if you use QLIB in your BASIC
  49.     programs, you are expected to register.
  50.  
  51.     The advantages of registering are many:
  52.  
  53.     Registered users receive the latest version available when they register
  54.     and may upgrade at any time for the paltry fee of $10.00.
  55.  
  56.     Registered users will receive the huge model library QLIBH.LIB as well
  57.     as the medium model QLIB.LIB
  58.  
  59.     Registered users may request custom modifications to any of QLIB's
  60.     subroutines (but I will not guarantee I can make all modifications!).
  61.  
  62.     Programs linked with registered versions of QLIB will be slightly smaller
  63.     than those linked with the distribution version, and will not contain my
  64.     copyright notice.
  65.  
  66.     Your registration fee supports my efforts, and encourages me to continue
  67.     development of QLIB.
  68.  
  69.     No royalties are required and registration costs only $25, and you will
  70.     have confidence that you are using a version of QLIB which has not been
  71.     altered by others.
  72.  
  73.     Register by sending $25 to:
  74.  
  75.               Douglas R. Herr
  76.               P. O. Box 207
  77.               Sacramento, CA  95812
  78.               U. S. A.
  79.  
  80.               telephone (916) 721-8762
  81.               CompuServe 71247,3542
  82.  
  83.  
  84.     Please specify which size disk you prefer, and which version you are
  85.     registering (QLIB for QuickBASIC 4.x or BC6, or QXLIB for BC7/QBX).
  86.     If you want both QLIB and QXLIB, please add $10.  QLIB 4.3 for older
  87.     QuickBASIC compilers is also $25.  Assembly-language source code for
  88.     any of the libraries is an additional $25.
  89.  
  90.     Any questions or problems should be sent to me at the above address.
  91.     Please include a stamped, self-addressed envelope if you are not a
  92.     registered user.
  93.  
  94.     QLIB is a rapidly evolving library, so it is likely that by the time you
  95.     register there will be several additional routines or refinements to
  96.     existing routines available.
  97.  
  98. HOW DO I USE QLIB?
  99.  
  100.     Beginning with version 5.0, QLIB has been optimized for QuickBASIC 4.0,
  101.     4.5 and BC7.  If you are using an earlier version of QuickBASIC, I can
  102.     supply you with QLIB version 4.3, which includes most of the
  103.     subroutines in QLIB5, but in a format usable by earlier QuickBASIC
  104.     versions.  There are two versions of the QLIB5 library: QLIB.LIB
  105.     for QuickBASIC 4.0 and QuickBASIC 4.5, and QXLIB.LIB is for BC7 and QBX.
  106.     QLIB.LIB should also work with BC6.
  107.  
  108.     QLIB may be used with your BASIC compiler by copying QLIB.BI and
  109.     QLIB.LIB (or QXLIB.LIB) to your BASIC directory.  You will need to
  110.     make a .QLB version of QLIB to use QLIB with the QuickBASIC or QBX
  111.     editor.  You will need the BQLB4x.LIB or QBXQLB.LIB libraries supplied
  112.     by Microsoft with your compiler.
  113.  
  114.     Make your .QLB file this way:
  115.  
  116.     QuickBASIC 4.0:   LINK /Q /SE:200 QLIB.LIB,,nul,BQLB40.LIB;
  117.     QuickBASIC 4.0b:  LINK /Q /SE:200 QLIB.LIB,,nul,BQLB41.LIB;
  118.     QuickBASIC 4.5:   LINK /Q /SE:200 QLIB.LIB,,nul,BQLB45.LIB;
  119.     QBX:              LINK /Q /SE:200 QXLIB.LIB,,nul,QBXQLB.LIB;
  120.  
  121.     If you are using QuickBASIC 4.0 or 4.0b, LINK will give you an error
  122.     message related to QLIB's use of the 8087 emulator.  This error message
  123.     is expected.  The practical effect of this error is that QLIB
  124.     subroutines which use BASIC's 8087 emulator will not work within the
  125.     QuickBASIC editor enviornment if you do not have a math coprocessor.
  126.     The emulator will be linked properly when you create your .EXE files.
  127.  
  128.  
  129.     QuickBASIC 4.0b's BQLB41.LIB library can be patched to eliminate the
  130.     error message (this may also work with QB 4.0's BQLB40.LIB):
  131.  
  132.     Step 1: extract object files from BCOM41.LIB
  133.             C:\LIB BCOM41 *BFPSIG *FIXUPS *EMOEM *PIEMR;
  134.  
  135.     Step 2: add these object files to BQLB41
  136.             C:\LIB BQLB41 +BFPSIG +FIXUPS +EMOEM +PIEMR,BQLB42;
  137.  
  138.     Step 3: Make a new QLIB.QLB
  139.             C:\LINK /Q /SE:160 QLIB.LIB,,NUL,BQLB42;
  140.  
  141.     I have not had the 8087 emulation problem with BQLB45.LIB or with
  142.     QBXQLB.LIB.  This patch seems to work within the QuickBASIC editor
  143.     but since 90% of the PCs I've used have math coprocessors, I can't
  144.     be certain.  Your experience with your own system is your best guide.
  145.  
  146.  
  147.  
  148.     To load QLIB with the QuickBASIC editor, use the command
  149.  
  150.          QB /L QLIB.QLB
  151.  
  152.     or for QBX, use:
  153.  
  154.          QBX /L QXLIB.QLB
  155.  
  156.     To use QLIB's functions, you MUST include the INCLUDE file QLIB.BI in
  157.     your source code.  QLIB.BI changes BASIC's default data type from
  158.     SINGLE to INTEGER, and also contains the declarations for QLIB's
  159.     functions.  QLIB's functions MUST be declared before they can be used,
  160.     and the INTEGER default data type is required.  You should change
  161.     the default data type to INTEGER whether you use QLIB or not, so your
  162.     programs will be smaller and faster.  Use SINGLE and DOUBLE data types
  163.     only when nessesary.  The documentation for QLIB's functions shows
  164.     you how to use the INCLUDE file.
  165.  
  166.     QLIB.BI has the function declarations for ALL of QLIB's functions.
  167.     You should use this as a template for the function declarations for
  168.     your programs.  If you compile your programs using an un-altered
  169.     QLIB.BI file,  all of the functions declared in the INCLUDE file
  170.     may be included in your .EXE program whether the program uses the
  171.     functions or not.
  172.  
  173.     REGISTERED USERS: note that QLIBH.BI should be used in place of QLIB.BI
  174.     if you are using the huge model library QLIBH.LIB.
  175.  
  176.  
  177.     Compile your source code using
  178.  
  179.          BC yourprog /O;
  180.  
  181.     (many QLIB subroutines require the /O option)
  182.  
  183.     Link QLIB with your object files with
  184.  
  185.          LINK /EX /NOE yourprog,,NUL,QLIB.LIB;
  186.     or   LINK /EX /NOE yourprog,,NUL,QXLIB.LIB;
  187.  
  188.     You may compile your source code and link to QLIB.LIB from within the
  189.     QuickBASIC editor, but QuickBASIC may include the ENTIRE QLIB.LIB file
  190.     in your .EXE file, whether you use any subroutines or not.  This is not
  191.     the way to keep your program small!  Link from the command line as I have
  192.     shown and your .EXE file will include only the subroutines you need.
  193.  
  194.     QLIB's documentation has been divided into several files in order to keep
  195.     each one down to a managable size.  The .DOC files are:
  196.  
  197.     INTRO.DOC      this file
  198.     INPUT.DOC      keyboard input subroutines
  199.     COMPLEX.DOC    COMPLEX data subroutines
  200.     DATA.DOC       data manipulation subroutines
  201.     DISK.DOC       disk and file management subroutines
  202.     EMS.DOC        LIM Expanded Memory subroutines
  203.     SYSTEM.DOC     subroutines which determine PC equipment or status
  204.     GRAPHICS.DOC   subroutines for graphics
  205.     SOLVE.DOC       solutions for common mathematical equations
  206.     VIDEO.DOC      video input and output subroutines (text modes)
  207.     UPDATE.DOC     important information if you are upgrading from an
  208.                    earlier version of QLIB
  209.  
  210.     Note: the other files which make up the QLIB5 package are:
  211.  
  212.     QLIB.LIB       QuickBASIC link library
  213.     QXLIB.LIB      BC7 link library
  214.     QLIB.BI        INCLUDE file for QuickBASIC and BC7/QBX
  215.  
  216.  
  217.     In the spirit of QB 4.5's on-line documentation, each of the .DOC
  218.     files may be loaded into the QuickBASIC or QBX editor (use DOCUMENT
  219.     switch), from which you may cut and paste into your source code to
  220.     your heart's content.  Hard copy of the documentation may be easily
  221.     (and inexpensively) obtained by using your printer.
  222.  
  223.     If you are upgrading from a version of QLIB before 5.0, read ALL of
  224.     the new .DOC files completely.  Many subroutines have been changed to
  225.     functions, and others have been replaced by new subroutines.  While
  226.     this may cause you some inconvenience in the short run, doing this
  227.     allowed me to provide higher performance and smaller code.
  228.  
  229. BASIC DATA TYPES
  230.  
  231.     QLIB's documentation is filled with reference to data of the %, &,
  232.     !, # and $ types.  If you already know what these mean, you may skip
  233.     this section, as long as you pay attention to the data types required
  234.     by QLIB's subroutines.  If you are not familiar with BASIC's data types,
  235.     by all means read your manual.
  236.  
  237.     Even if you don't use QLIB, the data types you use in your programs
  238.     will affect the speed and size of your programs.  In general, you
  239.     should use INTEGER (%) data types where possible, and DOUBLE (#)
  240.     types only where nessesary.
  241.  
  242.     BASIC assumes that all data is SINGLE (!) unless otherwise declared.
  243.     You can change the default data type to INTEGER with the command
  244.  
  245.           DEFINT A-Z
  246.  
  247.     I put this at the beginning of all my programs to improve speed, reduce
  248.     size and to eliminate the need for those silly % signs.  This statement
  249.     is part of the INCLUDE file QLIB.BI.
  250.  
  251.     When using QLIB subroutines, pay particular attention to the data types
  252.     required by each subroutine.  If you use the wrong data types, it is
  253.     likely (though not certain) that you will end up with garbage.
  254.  
  255.  
  256.     QLIB supports a COMPLEX data type consisting of paired SINGLE data.
  257.     Each COMPLEX value is 8 bytes.  COMPLEX data arrays should be allocated
  258.     with BASIC's DIM statement as DOUBLE data.  Once QLIB has established the
  259.     values of the COMPLEX data, BASIC in general will not interpret the data
  260.     correctly.  Exception: for complex conjugates, you can use BASIC.
  261.  
  262.     if c0# is a QLIB COMPLEX data type, this BASIC statement will result in
  263.     c1# = complex conjugate of c0#:
  264.  
  265.     c1# = -c0#
  266.  
  267.     Subroutines specific to the COMPLEX data type are described in
  268.     COMPLEX.DOC.
  269.  
  270.  
  271. SUBROUTINE REFERENCE
  272.  
  273. Documentation for QLIB's subroutines can be found in the following .DOC
  274. files:
  275.  
  276. Name           description                                      .DOC file
  277.                                                                         
  278. AddINTArray    add a constant to an integer array                DATA.DOC
  279. AddLNGArray    add a constant to a long integer array            DATA.DOC
  280. AddSNG         adds two SINGLE values, returning error flag      DATA.DOC
  281. AddDBL         adds two DOUBLE values, returning error flag      DATA.DOC
  282. AllocMem       allocates memory for QLIB from DOS memory area    DATA.DOC
  283. ANSIColor      determines color attribute used by ANSI.SYS      VIDEO.DOC
  284. APrint         Print on the screen using ANSI device driver     VIDEO.DOC
  285. APrintN        like APrint, but advances cursor to next line    VIDEO.DOC
  286. APrintT        APrint plus tab on same line                     VIDEO.DOC
  287. ASCII          returns ASCII code of a string, avoiding error    DATA.DOC
  288. BigPrint       print string on screen in big characters         VIDEO.DOC
  289. Bit2INT        converts a bit pattern to an integer              DATA.DOC
  290. BitBlockBytes  graphics screen manipulation                  GRAPHICS.DOC
  291. BitBlockRestore  restore graphics screen saved earlier       GRAPHICS.DOC
  292. BitBlockSave   save part of graphics screen                  GRAPHICS.DOC
  293. BitPlaneRestore  restore graphics plane saved earlier        GRAPHICS.DOC
  294. BitPlaneSave   save part of a plane of graphics screen       GRAPHICS.DOC
  295. BitPlaneBytes  calculates bytes required for BitPlaneSave    GRAPHICS.DOC
  296. BlockFrame     BIOS routine to frame a block of the screen      VIDEO.DOC
  297. BPrint         BIOS print on screen                             VIDEO.DOC
  298. BPrintL        BIOS print, lower case                           VIDEO.DOC
  299. BPrintU        BIOS print, upper case                           VIDEO.DOC
  300. C2F            converts degrees Celcius to Farenheit            SOLVE.DOC
  301. CapsOFF        force capslock toggle off                       SYSTEM.DOC
  302. CapsON         force capslock toggle on                        SYSTEM.DOC
  303. CircleAspect   DrawCircle options                            GRAPHICS.DOC
  304. ClearBlock     BIOS clear portion of screen                     VIDEO.DOC
  305. ClearEOL       clears a row from cursor to edge of screen       VIDEO.DOC
  306. ClearKBD       clears the keyboard 'type ahead' buffer          INPUT.DOC
  307. ClearView      clear portion of Graphics screen              GRAPHICS.DOC
  308. Clock          prints a time display on text-mode screens       VIDEO.DOC (b)
  309. ClrScreen      quickly clear entire screen                      VIDEO.DOC
  310. ColorAttr      calculate color attibute                         VIDEO.DOC
  311.  
  312. CombineINTArray  Add one array to another (or subtract)          DATA.DOC
  313. CombineLNGArray  Add one array to another (or subtract)          DATA.DOC
  314. CombineSNGArray  Add one array to another (or subtract)          DATA.DOC
  315. CombineDBLArray  Add one array to another (or subtract)          DATA.DOC
  316. CopyFile       copy a file to another disk or directory          DISK.DOC
  317. CopyMem        copies a block of memory                          DATA.DOC
  318. CPX2Real       splits COMPLEX value to real & imaginary parts COMPLEX.DOC
  319. CPXAdd         add two COMPLEX values                         COMPLEX.DOC
  320. CPXDiv         divides COMPLEX values                         COMPLEX.DOC
  321. CPXMul         multiplies two COMPLEX values                  COMPLEX.DOC
  322. CPXNeg         returns negative of a COMPLEX value            COMPLEX.DOC
  323. CPXNegI        returns complex conjugate of a COMPLEX values  COMPLEX.DOC
  324. CPXNegR        returns negative complex conjugate             COMPLEX.DOC
  325. CubeFitF4      use Least Squares to fit a curve to coordinates  SOLVE.DOC
  326. CubeFitF8      use Least Squares to fit a curve to coordinates  SOLVE.DOC
  327. CubeFitI2      use Least Squares to fit a curve to coordinates  SOLVE.DOC
  328. CubeFitI4      use Least Squares to fit a curve to coordinates  SOLVE.DOC
  329. CursorColor    enables InColor color palette, sets cursor color VIDEO.DOC
  330. CursorOFF      makes text cursor invisible                      VIDEO.DOC
  331. CursorON       places cursor on text screen                     VIDEO.DOC
  332. Date2LNG       compresses a date to a long integer for storage   DATA.DOC
  333. DayName        returns ASCII day name given day number 1-7       DATA.DOC
  334. DayOfWeek      returns the day of week for any given date        DATA.DOC
  335. DelArray2      deletes one element from an array of 2-byte data  DATA.DOC
  336. DelArray4      deletes one element from an array of 4-byte data  DATA.DOC
  337. DelArray8      deletes one element from an array of 8-byte data  DATA.DOC
  338. DelVSTRArray   deletes one element from a string array           DATA.DOC
  339. DBL2STR        DOUBLE-to-string conversion with formatting       DATA.DOC
  340. DGeyKey        DOS keyboard input; may be redirected            INPUT.DOC
  341. DOSError       returns MS-DOS error code for last DOS function SYSTEM.DOC
  342. DrawBox        draws a box on a graphics screen              GRAPHICS.DOC
  343. DrawCircle     draws a circle on graphics screen             GRAPHICS.DOC
  344. DrawLine       draws a line on graphics screen               GRAPHICS.DOC
  345. DriveReady     traps "drive not ready" errors                    DISK.DOC
  346. DriveSpace     determine free and total space on a disk          DISK.DOC
  347.  
  348. EGAinfo        determine EGA configuration                     SYSTEM.DOC
  349. EMSclose       closes an EMS "file"                               EMS.DOC
  350. EMSopen        opens an EMS "file"                                EMS.DOC
  351. EMSready       determines if EMS is installed                     EMS.DOC
  352. EMSRead        copies data from an EMS "file" to an array         EMS.DOC
  353. EMSRead1       copies one byte from an EMS "file"                 EMS.DOC
  354. EMSRead2       copies two bytes from an EMS "file"                EMS.DOC
  355. EMSRead4       copies four bytes from an EMS "file"               EMS.DOC
  356. EMSRead8       copies eight bytes from an EMS "file"              EMS.DOC
  357. EMSsize        determines free and available EMS memory           EMS.DOC
  358. EMSversion     determines EMS software version                    EMS.DOC
  359. EMSWrite       copies data to an EMS "file" from an array         EMS.DOC
  360. EMSWrite1      copies a 1-byte value to EMS memory                EMS.DOC
  361. EMSWrite2      copies a 2-byte value to EMS memory                EMS.DOC
  362. EMSWrite4      copies a 4-byte value to EMS memory                EMS.DOC
  363. EMSWrite8      copies an 8-byte value to EMS memory               EMS.DOC
  364. EXEName        returns full drive and path name of program     SYSTEM.DOC
  365. Exist          see if a file or subdirectory exists              DISK.DOC
  366. F2C            converts degrees Farenheit to Celcius            SOLVE.DOC
  367. Factorial      calculates the factorial of an integer        SOLVE.DOC
  368. FFlush         flushes DOS file buffer                           DISK.DOC
  369. FClose         close a file opened by FCreate or FOpen           DISK.DOC
  370. FCreate        creates a new file for fast binary I/O            DISK.DOC
  371. FileBegin      re-sets the file pointer to the start of a file   DISK.DOC
  372. FileCount      counts the number of files matching a template    DISK.DOC
  373. FileEnd        sets the file pointer at the end of a file        DISK.DOC
  374. FileMovPTR     moves the pointer for a file opened by FileOpen   DISK.DOC
  375. FOpenR         opens an existing file for fast binary input      DISK.DOC
  376. FOpenRW        opens an existing file for fast binary I/O        DISK.DOC
  377. FOpenW         opens an existing file for fast binary output     DISK.DOC
  378. FileRead       fast binary input from a file opened by FileOpen  DISK.DOC
  379. FileRead1      fast byte input from a file opened by FileOpen    DISK.DOC
  380. FileRead2      fast 2-byte input from a file opened by FileOpen  DISK.DOC
  381. FileRead4      fast 4-byte input from a file opened by FileOpen  DISK.DOC
  382. FileRead8      fast 8-byte input from a file opened by FileOpen  DISK.DOC
  383. FileSetPTR     set the file pointer position for a file          DISK.DOC
  384. FileWrite      fast binary output to a file opened by FileOpen   DISK.DOC
  385. FileWrite1     fast byte output to a file opened by FileOpen     DISK.DOC
  386. FileWrite2     fast 2-byte output to a file opened by FileOpen   DISK.DOC
  387. FileWrite4     fast 4-byte output to a file opened by FileOpen   DISK.DOC
  388. FileWrite8     fast 8-byte output to a file opened by FileOpen   DISK.DOC
  389.  
  390. FillArea       fills an irregular region on graphics screen  GRAPHICS.DOC
  391. FillBox        fills a box on graphics screen                GRAPHICS.DOC
  392. FillEOL        fills from cursor position to edge of screen     VIDEO.DOC
  393. FillPattern    establish fill pattern                        GRAPHICS.DOC
  394. Find1          finds 1-byte value in an array                    DATA.DOC
  395. Find2          finds 2-byte value in an array                    DATA.DOC
  396. Find4          finds 4-byte value in an array                    DATA.DOC
  397. Find8          finds 8-byte value in an array                    DATA.DOC
  398. FindFileAttr   FindFirstMatch/FindNextMatch option               DISK.DOC
  399. FindFileDate   FindFirstMatch/FindNextMatch option               DISK.DOC
  400. FindFileName   FindFirstMatch/FindNextMatch option               DISK.DOC
  401. FindFileSize   FindFirstMatch/FindNextMatch option               DISK.DOC
  402. FindFileTime   FindFirstMatch/FindNextMatch option               DISK.DOC
  403. FindFirstMatch find first matching file with wildcards           DISK.DOC
  404. FindMONO       determine if a monochrome monitor is present    SYSTEM.DOC
  405. FindNextMatch  find next file with wildcards                     DISK.DOC
  406. FLoad          quickly loads a disk file into far memory         DISK.DOC
  407. Floppies       determine number of floppy drives installed     SYSTEM.DOC
  408. FPrimeF4       calculate the differential of a polynomial       SOLVE.DOC
  409. FPrimeI2       calculate the differential of a polynomial       SOLVE.DOC
  410. FreeMem        releases memory block allocated by QLIB           DATA.DOC
  411. FSize          determine size of a file opened by QLIB           DISK.DOC
  412. FValue         calculate future value of contant cash flow      SOLVE.DOC
  413. GCenter        centers a string on a graphics screen         GRAPHICS.DOC
  414. GCenterX       centers a string on a graphics screen         GRAPHICS.DOC
  415. GCopy          copies one page of Graphics memory to another GRAPHICS.DOC
  416. GCursor        puts a text cursor on graphics screen         GRAPHICS.DOC
  417. GetANSI        determine ANSI screen color                      VIDEO.DOC
  418. GetCPU         determine processor installed                   SYSTEM.DOC
  419. GetCRT         determine video system                          SYSTEM.DOC
  420. GetDOSVer      determine DOS version installed                 SYSTEM.DOC
  421. GetDot         determine pixel status on graphics screen     GRAPHICS.DOC
  422. GetDRIVE       determine default drive                           DISK.DOC
  423. GetFileAttr    determine file attributes                         DISK.DOC
  424. GetKBDToggle   determine status of key toggles and shift keys  SYSTEM.DOC
  425. GetKey         returns first key pressed                        INPUT.DOC
  426. GetPOS         determine cursor position                        VIDEO.DOC
  427. GetSpeed       determine if CPU is operating at fast speed     SYSTEM.DOC
  428. GetSUB         determine default subdirectory                    DISK.DOC
  429. GetTime        returns system time to program                    DATA.DOC
  430. GetView        determine current graphics viewport           GRAPHICS.DOC
  431. GLineEdit      line editor for graphics screen               GRAPHICS.DOC
  432. GLoad          copies a graphics image file to video memory  GRAPHICS.DOC
  433. GMouse         initialize alternate graphics mouse cursor    GRAPHICS.DOC
  434. GPage          combines UseGPage and ShowGPage subroutines   GRAPHICS.DOC
  435. GPlaneSize     calculates array size for GPlane subroutines  GRAPHICS.DOC
  436. GPrint         print text on a graphics screen               GRAPHICS.DOC
  437. GPrintDOWN     text on graphics screen from top to bottom    GRAPHICS.DOC
  438. GPrintUP       text on graphics screen from bottom to top    GRAPHICS.DOC
  439. GPrintX        expanded text on graphics screen              GRAPHICS.DOC
  440. GPrint2X       expanded text on graphics screen              GRAPHICS.DOC
  441. GPrintDOWNX    expanded text on graphics screen              GRAPHICS.DOC
  442. GPrintDOWN2X   expanded text on graphics screen              GRAPHICS.DOC
  443. GPrintUPX      expanded text on graphics screen              GRAPHICS.DOC
  444. GPrintUP2X     expanded text on graphics screen              GRAPHICS.DOC
  445. GPullDown      pull-down menu system for graphics modes         INPUT.DOC (b)
  446. GSave          saves a graphics screen as a file             GRAPHICS.DOC
  447. GUCursor       puts underscore cursor on graphics screen     GRAPHICS.DOC
  448.  
  449. HGraph         establish Hercules graphics mode              GRAPHICS.DOC
  450. HGraph0        same as HGraph, but clears only page 0        GRAPHICS.DOC
  451. HideMouse      make mouse cursor invisible                      INPUT.DOC
  452. HideGMouse     make alternate graphics mouse invisible          INPUT.DOC
  453. HRam8043       switch to RamFont 43-row mode                    VIDEO.DOC
  454. HRam9025       switch to RamFont 90-column mode                 VIDEO.DOC
  455. HRam9043       switch to RamFont 90-column, 43-row mode         VIDEO.DOC
  456. HScroll        quick horizontal scroll of text screen           VIDEO.DOC
  457. HText          return to text mode from Hercules graphics    GRAPHICS.DOC
  458. InsArray2      inserts 2-byte data in an array                   DATA.DOC
  459. InsArray4      inserts 4-byte data in an array                   DATA.DOC
  460. InsArray8      inserts 8-byte data in an array                   DATA.DOC
  461. InsVSTRArray   insert a string in a variable-length string array DATA.DOC
  462. InsertOFF      force insert mode off                           SYSTEM.DOC
  463. InsertON       force insert mode on                            SYSTEM.DOC
  464. InsertString   insert one string in another, at any position     DATA.DOC
  465. InString       INSTR-like function                               DATA.DOC
  466. InStringCount  counts number of times a pattern is in a string   DATA.DOC
  467. InString2      INSTR-like function, case-insensitive             DATA.DOC
  468. InStringR      Reverse INSTR-like function                       DATA.DOC
  469. InString2R     Reverse INSTR-like function, case-insensitive     DATA.DOC
  470. INT2SNG        integer to floating point conversion              DATA.DOC
  471. INT2STR        integer to string conversion with formatting      DATA.DOC
  472. IsAlpha        determines if a key code is A-Z or a-z           INPUT.DOC
  473. IsDigit        determines if a key code is 0-9                  INPUT.DOC
  474. IsLower        determines if a key code is a-z                  INPUT.DOC
  475. IsSEVGA        determines if a Super EGA/VGA is installed      SYSTEM.DOC
  476. IsUpper        determines if a key code is A-Z                  INPUT.DOC
  477. KBDType        determine if an enhanced keyboard is present    SYSTEM.DOC
  478. KeyFilter      returns selected keys given input key code       INPUT.DOC
  479. KeyIfWaiting   returns key if one is waiting in keyboard buffer INPUT.DOC
  480. KeyOrButton    returns first keyboard or mouse input            INPUT.DOC
  481. KeyRate        sets keyboard typematic rate (AT and PS/2)      SYSTEM.DOC
  482. KeyWaiting     determines if a key has been pressed             INPUT.DOC
  483. KillFile       deletes file, with error trapping                 DISK.DOC
  484. KillSUB        deletes subdirectory, with error trapping         DISK.DOC
  485. KillGVScreen   release graphics VScreen memory               GRAPHICS.DOC
  486. KillVScreen    release VScreen memory                           VIDEO.DOC
  487. LastEdit       option for LineEdit and GLineEdit                INPUT.DOC
  488. LineEdit       text-mode line editor                            INPUT.DOC
  489. LineFitF4      use Least Squares to fit a line to coordinates   SOLVE.DOC
  490. LineFitF8      use Least Squares to fit a line to coordinates   SOLVE.DOC
  491. LineFitI2      use Least Squares to fit a line to coordinates   SOLVE.DOC
  492. LineFitI4      use Least Squares to fit a line to coordinates   SOLVE.DOC
  493. LinePattern    DrawLine and DrawBox option                   GRAPHICS.DOC
  494. LNG2Date       uncompresses a date stored by Date2LNG            DATA.DOC
  495. LNG2SNG        long integer to floating point conversion         DATA.DOC
  496. LNG2STR        long integer to string conversion                 DATA.DOC
  497. LOcase         converts text to lower case                       DATA.DOC
  498. MakeSUB        creates a new subdirectory with error trapping    DISK.DOC
  499. MakeGVScreen   virtual Hercules screens for QLIB graphics    GRAPHICS.DOC
  500. MakeVScreen    virtual screens for quick video subroutines      VIDEO.DOC
  501. MaskEdit       edit string with fixed field(s) and delimiters   INPUT.DOC
  502. MathChip       find math coprocessor                           SYSTEM.DOC
  503.  
  504. MaxDBLArray    find maximum of double-precision array            DATA.DOC
  505. MaxDBLb        find maximum of multi-dimensioned array           DATA.DOC
  506. MaxINTArray    find maximum of integer array                     DATA.DOC
  507. MaxINTb        find maximum of multi-dimensioned array           DATA.DOC
  508. MaxLNGArray    find maximum of long integer array                DATA.DOC
  509. MaxLNGb        find maximum of multi-dimensioned array           DATA.DOC
  510. MaxSNGArray    find maximum of single-precision array            DATA.DOC
  511. MaxSNGb        find maximum of multi-dimensioned array           DATA.DOC
  512. MaxVSTRArray   find longest in variable-length string array      DATA.DOC (b)
  513. MinDBLArray    find minimum of double-precision array            DATA.DOC
  514. MinDBLb        find minimum of multi-dimensioned array           DATA.DOC
  515. MinINTArray    find minimum of integer array                     DATA.DOC
  516. MinINTb        find minimum of multi-dimensioned array           DATA.DOC
  517. MinLNGArray    find minimum of long integer array                DATA.DOC
  518. MinLNGb        find minimum of multi-dimensioned array           DATA.DOC
  519. MinSNGArray    find minimum of single-precision array            DATA.DOC
  520. MinSNGb        find minimum of multi-dimensioned array           DATA.DOC
  521. MinVSTRArray   find shortest in variable-length string array     DATA.DOC (b)
  522. ModeColor      switch to color text mode                        VIDEO.DOC
  523. ModeMono       switch to monochrome monitor                     VIDEO.DOC
  524. Mode13225      switch to 132-column, 25-row mode                VIDEO.DOC
  525. Mode13243      switch to 132-column, 43-row mode                VIDEO.DOC
  526. Mode43         switch to EGA 43-row mode (VGA 50-row mode)      VIDEO.DOC
  527. MonthName      returns ASCII month name given month number       DATA.DOC
  528. MouseLimit     limit range of mouse motion                     SYSTEM.DOC
  529. MousePos       position mouse cursor on the screen             SYSTEM.DOC
  530. MouseReady     determine if mouse is available                 SYSTEM.DOC
  531. MouseStatus    returns mouse position and button status         INPUT.DOC
  532. MovePOS        moves the cursor by row and column offsets       VIDEO.DOC
  533. MulCURArray    multiply CURRENCY array by a constant             DATA.DOC (a)
  534. MulCURb        multiply CURRENCY array by a constant             DATA.DOC (a)
  535. MulDBLArray    multiply double-precision array by a constant     DATA.DOC
  536. MulDBLb        multiply double-precision array by a constant     DATA.DOC
  537. MulINTArray    multiply integer array by a constant              DATA.DOC
  538. MulINTb        multiply integer array by a constant              DATA.DOC
  539. MulLNGArray    multiply long integer array by a constant         DATA.DOC
  540. MulLNGb        multiply long integer array by a constant         DATA.DOC
  541. MulSNGArray    multiply single-precision array by a constant     DATA.DOC
  542. MulSNGb        multiply single-precision array by a constant     DATA.DOC
  543. NetPValue      calculate net present value                      SOLVE.DOC
  544. NoClock        de-activates clock display                       VIDEO.DOC (b)
  545. NumOFF         forces NumLock off                              SYSTEM.DOC
  546. NumON          forces NumLock on                               SYSTEM.DOC
  547. PaintScreen    quick complete color change, entire screen       VIDEO.DOC
  548. PaintWindow    quick complete color change, part of screen      VIDEO.DOC
  549. Path$          returns the path in the program's enviornment   SYSTEM.DOC
  550. Payment        calculates periodic payment or capital recovery  SOLVE.DOC
  551. PrinterError   detect off-line or out-of-paper errors          SYSTEM.DOC
  552. PrnScreenOFF   disable Print Screen                            SYSTEM.DOC
  553. PrnScreenON    enable Print Screen                             SYSTEM.DOC
  554. PullDown       pull-down menu system for text modes             INPUT.DOC (b)
  555. PutDot         turn Graphics pixel on or off                 GRAPHICS.DOC
  556. PValue         calculate present value of constant cash flow    SOLVE.DOC
  557. QCenter        centers a string on the screen                   VIDEO.DOC
  558. QPrint         quick print to screen or virtual screen          VIDEO.DOC
  559. QPrintCE       quick print and clear to end of line             VIDEO.DOC
  560. QPrintFArray   quick print array of fixed-length strings        VIDEO.DOC
  561. QPrintL        quick print, lower case                          VIDEO.DOC
  562. QPrintU        quick print, upper case                          VIDEO.DOC
  563. QPrintVArray   quick print array of variable-length strings     VIDEO.DOC
  564. QPrintW        quick print with word wrap                       VIDEO.DOC
  565. QRead          quick read from screen or virtual screen         VIDEO.DOC
  566. QuadFitF4      use Least Squares to fit a curve to coordinates  SOLVE.DOC
  567. QuadFitF8      use Least Squares to fit a curve to coordinates  SOLVE.DOC
  568. QuadFitI2      use Least Squares to fit a curve to coordinates  SOLVE.DOC
  569. QuadFitI4      use Least Squares to fit a curve to coordinates  SOLVE.DOC
  570. Quadratic      calculates the solutions of a quadratic equation SOLVE.DOC
  571.  
  572. RAMsize        determines installed base RAM                   SYSTEM.DOC
  573. ReadSShort     read signed short integer from an array           DATA.DOC
  574. ReadUShort     read unsigned short integer from an array         DATA.DOC
  575. Real2CPX       form COMPLEX data from real & imaginary parts  COMPLEX.DOC
  576. ReColorScreen  quick selective color change, entire screen      VIDEO.DOC
  577. ReColorWindow  quick selective color change, part of screen     VIDEO.DOC
  578. Rename         renames a file, avoiding QB's ON ERROR            DISK.DOC
  579. ReplaceString  replace part of a string with another, any length DATA.DOC
  580. Scramble       makes a string of text unreadable                 DATA.DOC
  581. ScreenDump     prints Hercules graphics screen               GRAPHICS.DOC
  582. ScreenRestore  restores a screen saved by ScreenSave            VIDEO.DOC
  583. ScreenRows     determines the dimensions of the screen          VIDEO.DOC
  584. ScreenSave     copies screen to restore later                   VIDEO.DOC
  585. ScreenMem      allocates memory required to store a screen      VIDEO.DOC
  586. ScreenMode     set text/graphics screen mode                 GRAPHICS.DOC
  587. Scroll         BIOS screen scroll                               VIDEO.DOC
  588. ScrollOFF      forces scroll lock off                          SYSTEM.DOC
  589. ScrollON       forces scroll lock on                           SYSTEM.DOC
  590. SetBLINK       disable/enable blinking attributes               VIDEO.DOC
  591. SetArray1      set initial value of short integer array          DATA.DOC
  592. SetArray1b     set initial value of short integer array          DATA.DOC
  593. SetArray2      set initial value of INTEGER array                DATA.DOC
  594. SetArray2b     set initial value of INTEGER array                DATA.DOC
  595. SetArray4      set initial value of LONG or SINGLE array         DATA.DOC
  596. SetArray4b     set initial value of LONG or SINGLE array         DATA.DOC
  597. SetArray8      set initial value of DOUBLE or CURRENCY array     DATA.DOC
  598. SetArray8b     set initial value of DOUBLE or CURRENCY array     DATA.DOC
  599. SetDRIVE       set default drive                                 DISK.DOC
  600. SetFileAttr    set file attributes                               DISK.DOC
  601. SetFileDate    set file date and time                            DISK.DOC
  602. SetGBlock      restores portion of graphics screen           GRAPHICS.DOC
  603. SetKBDToggle   set keyboard toggles                            SYSTEM.DOC
  604. SetPOS         position the cursor on the screen                VIDEO.DOC
  605. SetSpeed       sets CPU speed on multi-speed computers         SYSTEM.DOC
  606. SetSUB         changes default subdirectory                      DISK.DOC
  607. SetView        establish active graphics viewport            GRAPHICS.DOC
  608. ShiftCUR       shift the bits in an unsigned currency integer    DATA.DOC (a)
  609. ShiftINT       shift the bits in an unsigned integer             DATA.DOC
  610. ShiftINTArray  shift the bits in an unsigned integer array       DATA.DOC
  611. ShiftLNG       shift the bits in an unsigned long integer        DATA.DOC
  612. ShiftLNGArray  shift the bits in an unsigned long integer array  DATA.DOC
  613. ShowGPage      changes graph page visible on the screen      GRAPHICS.DOC
  614. ShowGraphPlane select visible color plane in 16-color graphs GRAPHICS.DOC
  615. ShowMouse      make mouse cursor visible                        INPUT.DOC
  616. ShowGMouse     make alternate graphics mouse visible            INPUT.DOC
  617. ShowTPage      switch visible screen page (text mode)           VIDEO.DOC
  618. SmallText      GPrint and GLineEdit option                   GRAPHICS.DOC
  619. SNG2INT        copies the integer portion of a! to a%            DATA.DOC
  620. SNG2LNG        copies the integer portion of a! to a&            DATA.DOC
  621. SNG2STR        SINGLE-to-string conversion with formatting       DATA.DOC
  622. SnowOFF        disable CGA "snow" control                       VIDEO.DOC
  623. SnowON         enable CGA "snow" control (QLIB's default)       VIDEO.DOC
  624.  
  625. SortDBLArrayHI sort double-precision array from high to low      DATA.DOC
  626. SortDBLArrayLO sort double-precision array from low to high      DATA.DOC
  627. SortINTArrayHI sort integer array from high to low               DATA.DOC
  628. SortINTArrayLO sort integer array from low to high               DATA.DOC
  629. SortLNGArrayHI sort long integer array from high to low          DATA.DOC
  630. SortLNGArrayLO sort long integer array from low to high          DATA.DOC
  631. SortSNGArrayHI sort single-precision array from high to low      DATA.DOC
  632. SortSNGArrayLO sort single-precision array from low to high      DATA.DOC
  633. SortVSTRArrayHI sort variable-length string array from hi to low DATA.DOC
  634. SortVSTRArrayLO sort variable-length string array from low to hi DATA.DOC
  635. SortVSTRArrayHI2 case-insensetive string array sort              DATA.DOC
  636. SortVSTRArrayLO2 case-insensetive string array sort              DATA.DOC
  637. SShiftCUR      shift bits in a signed currency integer           DATA.DOC (a)
  638. SShiftINT      shift bits in a signed integer                    DATA.DOC
  639. SShiftLNG      shift bits in a signed long integer               DATA.DOC
  640. SShiftINTArray shift bits in a signed integer array              DATA.DOC
  641. SShiftLNGArray shift bits in a signed long integer array         DATA.DOC
  642. StartEdit      option for LineEdit and GLineEdit                INPUT.DOC
  643. StdDevDBL      calculates standard deviation of a DOUBLE array  SOLVE.DOC
  644. StdDevINT      calculates standard deviation of an INT array    SOLVE.DOC
  645. StdDevLNG      calculates standard deviation of a LONG array    SOLVE.DOC
  646. StdDevSNG      calculates standard deviation of a SINGLE array  SOLVE.DOC
  647. StdText        restores normal text size on graphics screen  GRAPHICS.DOC
  648. strchr         search a string for a specified character         DATA.DOC
  649. StripChar      removes specified characters from a string        DATA.DOC
  650. SumDBLArray    calculates the total of a double-precision array  DATA.DOC
  651. SumINTArray    calculates the total of an integer array          DATA.DOC
  652. SumLNGArray    calculates the total of a long integer array      DATA.DOC
  653. SumSNGArray    calculates the total of a single-precision array  DATA.DOC
  654. Super13        320 x 400 256-color graphics mode for VGA     GRAPHICS.DOC
  655. Super13a       360 x 480 256-color graphics mode for VGA     GRAPHICS.DOC
  656. SVGA16         set SuperVGA 16-color modes                   GRAPHICS.DOC
  657. SVGA256        set SuperVGA 256-color modes                  GRAPHICS.DOC
  658. TCopy          copies one screen page to another (text or Herc) VIDEO.DOC
  659. TLoad          loads a disk file into video memory              VIDEO.DOC
  660. TMouseStatus   get mouse charcter position & buttons pressed    INPUT.DOC
  661. TPage          combines UseTPage and ShowTPage subroutines      VIDEO.DOC
  662. TrimRight      used to trim blanks off the end of a string       DATA.DOC
  663. TSave          saves a text-mode screen as a disk file          VIDEO.DOC
  664. Today          returns today's date                              DATA.DOC
  665. UCursorON      places underscore cursor on text screen          VIDEO.DOC
  666. UnScramble     restores a string scrambled by Scramble           DATA.DOC
  667. UPcase         converts text to upper case                       DATA.DOC
  668. Use32k         Hercules memory management                    GRAPHICS.DOC
  669. Use64k         Hercules memory management                    GRAPHICS.DOC
  670. UseDefault     causes QLIB to use system graphics mode       GRAPHICS.DOC
  671. UseFont        font definitions for QLIB graphics text       GRAPHICS.DOC
  672. UseGPage       change active graphics page                   GRAPHICS.DOC
  673. UseHerc        causes QLIB to use Hercules graphics          GRAPHICS.DOC
  674. UseTPage       set active page in text mode                     VIDEO.DOC
  675. VertList       vertical list menu system                        INPUT.DOC (b)
  676. VScroll        quick vertical scroll of screen                  VIDEO.DOC
  677.  
  678. WhichVGA       finds VGAKIT-compatible equipment             GRAPHICS.DOC
  679. WindowClear    quick clear portion of screen                    VIDEO.DOC
  680. WindowEdit     edit a string in a window on the screen          INPUT.DOC
  681. WindowFill     quickly fill a portion of a text-mode screen     VIDEO.DOC
  682. WindowFrame    quick window outline draw                        VIDEO.DOC
  683. WindowRestore  restores portion of screen saved by WindowSave   VIDEO.DOC
  684. WindowSave     copies a portion of screen to restore later      VIDEO.DOC
  685. WindowMem      allocates memory needed to store screen          VIDEO.DOC
  686. WLastEdit      WindowEdit option                                INPUT.DOC
  687. WriteShort     write a short integer to an array                 DATA.DOC
  688. WStartEdit     WindowEdit option                                INPUT.DOC
  689. XMode16        Super EGA/VGA 16-color graphics               GRAPHICS.DOC
  690. XMode16A       Super EGA/VGA 16-color graphics               GRAPHICS.DOC
  691. YesNo          waits for "Y" or "N" key to be pressed           INPUT.DOC
  692.  
  693. (a) these subroutines work with BC7 and QBX only
  694.  
  695. (b) these subroutines work only with QuickBASIC or BC7 without /FS option
  696.  
  697.  
  698.  
  699. Several QLIB users have requested a cross-reference listing of QLIB
  700. object files in order to extract individual subroutines from the QLIB.LIB
  701. library file.  I have begun to provide this information in the documentation
  702. for each subroutine.  Since many QLIB subroutines call subroutines in
  703. other QLIB object modules, a cross reference list can become quite messy.
  704.  
  705. The subroutine documentation may include lines like this:
  706.  
  707.      Subroutine: QPrint(a$, row%, col%, attr%)
  708.      Object files: qprint.obj (crt.obj, q$qprn.obj)
  709.  
  710. In this case, QPRINT's primary subroutine is in qprint.obj, and
  711. qprint.obj calls subroutines in crt.obj and in q$qprn.obj.  All three
  712. object files must be extracted from QLIB.LIB if you want to extract
  713. QPRINT from the library.
  714.  
  715. Use the LIB utility supplied by Microsoft with your compiler to extract
  716. the object files:
  717.  
  718. LIB QLIB *qprint*crt*q$qprn;<enter>
  719.  
  720. This command will copy the object files from the library to your disk.
  721.  
  722.  
  723.          ----------------end-of-author's-documentation---------------
  724.  
  725.                          Software Library Information:
  726.  
  727.                     This disk copy provided as a service of
  728.  
  729.                            Public (software) Library
  730.  
  731.          We are not the authors of this program, nor are we associated
  732.          with the author in any way other than as a distributor of the
  733.          program in accordance with the author's terms of distribution.
  734.  
  735.          Please direct shareware payments and specific questions about
  736.          this program to the author of the program, whose name appears
  737.          elsewhere in  this documentation. If you have trouble getting
  738.          in touch with the author,  we will do whatever we can to help
  739.          you with your questions. All programs have been tested and do
  740.          run.  To report problems,  please use the form that is in the
  741.          file PROBLEM.DOC on many of our disks or in other written for-
  742.          mat with screen printouts, if possible.  PsL cannot debug pro-
  743.          programs over the telephone, though we can answer questions.
  744.  
  745.          Disks in the PsL are updated  monthly,  so if you did not get
  746.          this disk directly from the PsL, you should be aware that the
  747.          files in this set may no longer be the current versions. Also,
  748.          if you got this disk from another vendor and are having prob-
  749.          lems,  be aware that  some files may have become corrupted or
  750.          lost by that vendor. Get a current, working disk from PsL.
  751.  
  752.          For a copy of the latest monthly software library newsletter
  753.          and a list of the 3,000+ disks in the library, call or write
  754.  
  755.                            Public (software) Library
  756.                                P.O.Box 35705 - F
  757.                             Houston, TX 77235-5705
  758.  
  759.                                  Orders only:
  760.                                 1-800-2424-PSL
  761.                               MC/Visa/AmEx/Discover
  762.  
  763.                           Outside of U.S. or in Texas
  764.                           or for general information,
  765.                               Call 1-713-524-6394
  766.  
  767.                           PsL also has an outstanding
  768.                           catalog for the Macintosh.
  769.  
  770.  
  771.